/**
 * 用户中心公用脚本
 * @author Rox <rox@taomee.com>
 */
$(function() {
    // popups
    var OFFSET_TOP = 100;			// 弹出框到顶部距离，单位：px
    var mask = $('<div></div>')
                            .css('position', 'absolute')
                            .css('top', 0)
                            .css('left', 0)
                            .css('z-index', 11)
                            .css('width', '100%')
                            .css('height', '100%')
                            .css('background-color', '#333')
                            .css('opacity', 0.8)
                            .hide()
                            .appendTo(document.body);
    var popup_container = $('<div></div>')
                            .css('position', 'absolute')
                            .css('z-index', 12)
                            .css('left', '50%');

    var show_mask = function() {
        mask.css('width', $(document).width()).css('height',
                $(document).height()).show();
    };
    var hide_mask = function() {
        mask.hide();
    };
    var hide_popup = function() {
        $('div[id]', popup_container).hide().appendTo(document.body);
        hide_mask();
    };
    var show_popup = function(element) {
        show_mask();
        $('div[id]', popup_container).hide().appendTo(document.body);
        popup_container.append($(element).show())
                          .appendTo(document.body)
                          .css('top', OFFSET_TOP + $(document).scrollTop())
                          .css('margin-left', -$(element).outerWidth()/2)
                          .fadeIn('fast');
    };

    var show_message = function(title, content) {
        var elm = $('#addfriend_success');
        $('.body h2', elm).html(title);
        $('.body p', elm).html(content);
        show_popup(elm);
    };

    $('a[href*=#close]').live('click', function(e) {
        e.preventDefault();

        hide_popup();
    });

    $(document).keydown(function(e) {
        if (e.keyCode == 27 )
        {
            hide_popup();
        }
    });

    $('#search_success a.btn_addfriend').click(function(e) {
        e.preventDefault();
        hide_popup();
    });

    $('.findfriend form').bind('submit', function(e) {
        e.preventDefault();
        var payload = {
            q : $('.findfriend form input[name=q]').val()
        };
        $.post($(this).attr('action'), payload, function(data) {
            show_mask();
            if (data.result == 'empty')
            {
                show_popup($('#search_empty'));
            }
            else if (data.result == 'error')
            {
                show_popup($('#search_error'));
            }
            else
            {
                var info = data['info'];
                if ( info.is_self )
                {
                    var elm_popup = $('#search_self');
                }
                else
                {
                    var elm_popup = $('#search_success');
                }

                // update
                $('img.avatar_50', elm_popup).attr('src', info.avatar_50);
                $('.name', elm_popup).empty().append($('<a></a>').attr('href', info.link).attr('target', '_blank').text(info.name + '(' + info.uid + ')'));
                $('a.btn_addfriend', elm_popup).attr('href', info.link_add_friend);

                show_popup(elm_popup);
            }
        }, 'json');
    });

    // 更新好友动态tab
    var update_news_dom = function() {
        var tab_news = $('.tab_news');
        if ( !tab_news || tab_news.length <=0 ) return;

        var current_page = parseInt($('.tab_news input[name=page]').val());
        if ( !current_page ) return;

        var url = '/user/news/?page=' + current_page;

        tab_news.load(url, function() {
            $('a[href*=/user?uid]', tab_news).attr('target', '_blank');
        });

        update_counts();
    };

    // 更新好友请求tab内容
    var update_request_dom = function() {
        var tab_request = $('.tab_request');
        if ( !tab_request || tab_request.length <= 0) return;

        var current_page = parseInt($('.tab_request input[name=page]').val());
        if ( !current_page ) return;

        var url = '/user/request/?page=' + current_page;
        tab_request.load(url, function() {
            $('a[href*=/user?uid]', tab_request).attr('target', '_blank');
        });

        update_counts();
    };

    // 更新玩国信箱（系统消息）tab
    var update_notice_dom = function() {
        var tab_request = $('.tab_notice');
        if ( !tab_request || tab_request.length <= 0) return;

        var current_page = parseInt($('.tab_notice input[name=page]').val());
        if ( !current_page ) return;

        var url = '/user/notice/?page=' + current_page;
        tab_request.load(url);

        update_counts();
    };

    // 读取被选中的一组checkbox的值
    var get_checked_values = function(){
        var result_set = [];
        $('#news li input[type=checkbox]').each(function() {
            if ( $(this).attr('checked') )
            {
                var v = parseInt($(this).attr('value'));
                if ( v ) result_set.push(v);
            }
        });

        if ( !result_set || result_set.length <= 0 ) return false;

        return result_set;
    };

    // 添加好友
    var add_message = function(key) {
        switch(key) {
            case '-1': return '小国民，你找的好友就是你自己，不能加自己为好友哦。';
            case '0' : return '一旦对方接受了你的好友请求，你们就正式成为好友了哦！';
            case '1' : return '对方已经是你的好友了';
            case '2' : return '你之前已经发送过好友请求了~请耐心等待对方的回应';
            case '3' : return '你的好友列表已经满了！';
            case '4' : return '对方的好友列表已经满了！';
            default : return '出错啦……刷新页面再试一次吧';
        }
    };
    $('a[href*=/user/addfriend]').bind('click', function(e) {
        e.preventDefault();
        $.get($(this).attr('href'), null, function(data, textStatus) {
            var msg = add_message(data);
            var title = (data==0) ? '好友请求发送成功！' : '好友请求发送失败';
            if ( data == -1 ) title = '不可以加自己为好友哦。';
            show_message(title, msg);
        }, 'text');
    });

    // 确认好友请求
    jQuery.each([jQuery('a[href*=/user/confirmfriend]'), jQuery('a[href*=/user/friend_confirm]')], function(i, val) {
        $(val).live('click', function(e) {
            e.preventDefault();
            var elm = $(this);
            $.get(elm.attr('href').replace(/friend_confirm/, 'confirmfriend'), null, function(data, textStatus) {
                if ( data == '0' )
                {
                    update_request_dom();
                    show_message('成功添加好友', '大玩国里又多了对新朋友喽');
                }
                else
                {
                    show_message('添加好友失败', '添加好友失败了');
                }
            }, 'text');
            return false;
        });
    });

    // 忽略好友请求
    $('a[href*=/user/ignorefriend]').live('click', function(e) {
        e.preventDefault();
        $.get($(this).attr('href'), null, function(data, textStatus) {
            update_request_dom();
        }, 'text');
        return false;
    });

    // 全选
    $('#select_all').live('click', function(e) {
        // 如果有未选中的，全选，自己的状态设为选中
        // 否则，全取消选中，自己的状态设为未选中
        var all_checked = true;
        $('#news li input[type=checkbox]').each(function() {
            if ( !$(this).attr('checked') )
            {
                all_checked = false;
            }
        });

        $('#news li input[type=checkbox]').each(function() {
            if ( all_checked )
            {
                $(this).removeAttr("checked");
            }
            else
            {
                $(this).attr('checked', 'checked');
            }
        });

        if ( (all_checked && $(this).attr('checked')) || (!all_checked && !$(this).attr('checked')) )
        {
            e.preventDefault();
        }
    });

    // 批量成为好友/不搭理
    $('#request_confirm_all').live('click', function(e) {
        var userid_set = get_checked_values();

        if ( !userid_set || userid_set.length <= 0 ) return false;

        var url_prefix = '/user/confirmfriend';
        var data = {
            userid: userid_set.join(',')
        };
        var count = userid_set.length;

        $.get(url_prefix, data, function(data) {
            if ( data == '0' )
            {
                // 成功，删除本条消息
                update_request_dom();
                show_message('成功添加好友', '大玩国里又多了新朋友喽');
            }
            else
            {
                show_message('添加好友失败', '添加好友失败');
            }
        });

        return false;
    });

    $('#request_ignore_all').live('click', function(e) {
        var userid_set = get_checked_values();

        if ( !userid_set || userid_set.length <= 0 ) return false;

        var url_prefix = '/user/ignorefriend';
        var data = {
            userid: userid_set.join(',')
        };

        $.get(url_prefix, data, function(data) {
            update_request_dom();
        });

        return false;
    });

    // 未读消息数量
    var update_counts = function() {
        var url = '/user/msgcount';
        $.getJSON(url, function(data) {
            if ( !data ) return;
            var count_notice  = parseInt(data['notice']);
            var count_request = parseInt(data['request']);

            $('a[href*=#notice] .count').remove();
            $('a[href*=#request] .count').remove();

            if ( count_notice )
            {
                $('<span></span>').addClass('count').html('(' + count_notice + ')').appendTo($('a[href*=#notice]'));
            }

            if ( count_request )
            {
                $('<span></span>').addClass('count').html('(' + count_request + ')').appendTo($('a[href*=#request]'));
            }
        });
    };
    update_counts();

    // tab switch
    var set_tab = function(action, className) {
        var active_class = 'on';
        var a_selector = 'a[href*=#' + action + ']';
        $(a_selector).live('click', function(e) {
            e.preventDefault();
            e.stopPropagation();

            if ( $(this).hasClass(active_class) ) return false;

            $('a[href*=#news], a[href*=#request], a[href*=#notice]').removeClass(active_class);
            $(this).addClass(active_class);

            update_counts();

            $('.tab_news, .tab_request, .tab_notice')
                .removeClass('tab_news')
                .removeClass('tab_request')
                .removeClass('tab_notice')
                .load('/user/' + action + '/', function() {
                    $(this).addClass(className);
                    $('a[href*=/user?uid]', this).attr('target', '_blank');
                });

            return false;
        });
    };
    set_tab('news', 'tab_news');
    set_tab('request', 'tab_request');
    set_tab('notice', 'tab_notice');
    $('[class*=tab_] a[href*=/user?uid]').attr('target', '_blank');

    // ajax pagination
    var bind_paginator = function(action, className)
    {
        var selector = '.' + className;
        $(selector + ' [class*=page] a').live('click', function(e) {
            e.preventDefault();
            e.stopPropagation();

            var href = $(this).attr('href').replace('/user', '/user/' + action + '/');
            $(selector).load(href);

            return false;
        });
    };
    bind_paginator('news', 'tab_news');
    bind_paginator('request', 'tab_request');
    bind_paginator('notice', 'tab_notice');

    // notice 弹出框
    $('#news .notice_title, #news .notice_title_read').live('click', function() {
        var link_element = $(this);
        var href = $(this).attr('href');
        $.get(href, null, function(data) {
            var popup = $('<div></div>').hide().html(data);
            show_popup(popup);

            link_element.removeClass('weidu').addClass('yidu')
                        .removeClass('notice_title')
                        .addClass('notice_title_read');
            update_counts();
        });
        return false;
    });

    // 删除消息
    $('#news a[href*=/user/delMessage]').live('click', function() {
        var href = $(this).attr('href');
        $.get(href, null, function(data) {
            if ( data ) {
                update_notice_dom();
                update_news_dom();
            }
        });
        return false;
    });

    // 批量删除、批量设为已读
    $('#news a[href*=#delete_all]').live('click', function() {
        var msgid_set = get_checked_values();
        if ( !msgid_set || msgid_set.length <= 0 ) return false;

        var href = '/user/delMessage';
        var payload = {
            id: msgid_set.join(',')
        };
        $.get(href, payload, function(data) {
            if ( data ) {
                update_notice_dom();
            }
        });

        return false;
    });

    $('#news a[href*=#set_read_all]').live('click', function() {
        var msgid_set = get_checked_values();
        if ( !msgid_set || msgid_set.length <= 0 ) return false;

        var href = '/user/setReadMessage';
        var payload = {
            id: msgid_set.join(',')
        };
        $.get(href, payload, function(data) {
            if ( data ) {
                update_notice_dom();
            }
        });

        return false;
    });
});
